Computer functionality and user experience are increasingly provided via enterprise networks containing vast collections of deployed computing resources, accessible through various mechanisms, often the Internet, and that act in concert to provide services. Such systems can be referred to as “data centers” or “cloud platforms,” though it will be appreciated that this discussion in general applies to multi-resource computing systems of various scales. That said, hundreds, thousands, even a hundred thousand or more hardware/software resources are often employed, including servers; databases; various software applications; firewalls; routers; bridges; switches; printing systems; network area storage devices; wireless access points; etc. Within a given category of hardware/software, there will often be different versions; resources of different vintage (e.g., legacy servers); resources near the end of their useful life; newly replaced components, etc. It will be therefore be appreciated that these systems can be incredibly dynamic.
The cloud-service-oriented IT movement has accelerated the adoption of a new set of technologies. In many cases, such systems leverage a combination of micro service, virtualization, and container technologies. While these technologies deliver flexibility, reliability, and on-demand scalability, they can also add to the already considerable dynamism referred to above. Still further, the component lineup in these environments may constantly change—any component within a service can be started, stopped, upgraded or replaced while the service is still running.
The above scenarios inevitably lead to challenges with configuration drift, which is the phenomenon where running data center infrastructure and hosted services become more and more different as time goes on, due to manual or automated ad-hoc changes and updates, and general entropy.